Avasta Pythoniga manussüsteemide maailm. Juhend käsitleb MicroPythoni, CircuitPythoni, riistvara integreerimist ja projekte ülemaailmsele publikule.
Python otse riistvaral: Põhjalik sukeldumine manussüsteemide programmeerimisse ja mikrokontrollerite integreerimisse
Aastakümneid oli manussüsteemide maailm – pisikesed arvutid, mis toidavad kõike alates nutikelladest kuni tööstusmasinateni – madala taseme keelte nagu C, C++ ja Assembler eksklusiivne domeen. Need keeled pakuvad võrratut kontrolli ja jõudlust, kuid nendega kaasnevad järsk õppimiskõver ja pikad arendustsüklid. Astuge lavale Python, keel, mis on tuntud oma lihtsuse, loetavuse ja tohutu ökosüsteemi poolest. Kunagi piirdus Python veebiserverite ja andmeteadusega, kuid nüüd teeb see võimsa rünnaku riistvara südamesse, demokratiseerides elektroonikat uuele arendajate, harrastajate ja uuendajate põlvkonnale kogu maailmas.
See juhend on teie põhjalik sissejuhatus Pythoni manussüsteemide programmeerimise põnevasse maailma. Uurime, kuidas kõrgetasemeline keel nagu Python saab riistvara otse juhtida, uurime peamisi platvorme, mis seda võimaldavad, ja käsitleme praktilisi näiteid, et aidata teil alustada oma teekonda tarkvarast räni juurde.
Pythoni manussüsteemide ökosüsteem: rohkem kui lihtsalt CPython
Tavalist Pythoni, mida kasutate oma sülearvutis (tuntud kui CPython), ei saa lihtsalt tavalisele mikrokontrollerile installida. Nendel seadmetel on äärmiselt piiratud ressursid – räägime kilobaitidest RAM-ist ja megahertslisest töötlemisvõimsusest, mis on teravas kontrastis kaasaegse arvuti gigabaitide ja gigahertsidega. Selle lünga ületamiseks loodi spetsiaalsed, saledad Pythoni implementatsioonid.
MicroPython: Python mikrokontrolleritele
MicroPython on Python 3 programmeerimiskeele täielik ümberkirjutus, mis on optimeeritud töötama piiratud riistvaral. Damien George'i loodud eesmärk on olla võimalikult ühilduv standardse Pythoniga, pakkudes samal ajal otsetee madalatasemelisele riistvara juurdepääsule.
- Põhifunktsioonid: See sisaldab interaktiivset lugemise-hindamise-printimise silmust (REPL), mis võimaldab teil ühendada plaadiga ja täita koodi rida-realt ilma kompileerimisetapita. See on väga tõhus, väikese mälukasutusega ja pakub võimsaid mooduleid, nagu
machine, otse riistvara juhtimiseks (GPIO, I2C, SPI jne). - Parim: Arendajatele, kes soovivad maksimaalset jõudlust, peeneteralist riistvarakontrolli ja ühilduvust laia valiku mikrokontrollerite vahel. See on lähemal "riistvarale" ja eelistatakse sageli jõudluskriitilisemates rakendustes.
CircuitPython: Algajasõbralik jõujaam
CircuitPython on MicroPythoni haru, mille on loonud ja mida haldab Adafruit, juhtiv ettevõte isetegemise (DIY) elektroonika valdkonnas. Kuigi see jagab MicroPythoniga tuuma, on selle filosoofia keskendunud kasutusmugavusele ja haridusele.
- Põhifunktsioonid: Kõige silmapaistvam funktsioon on see, kuidas see mikrokontrollerit teie arvutile esitab. Kui ühendate CircuitPythoni plaadi, ilmub see väikese USB-mälupulgana. Lihtsalt redigeerite oma
code.pyfaili sellel kettal ja salvestate selle; plaat laadib uue koodi automaatselt uuesti ja käivitab selle. Sellel on ka ühtne API kõigil toetatud plaatidel, mis tähendab, et ühe plaadi sensori lugemise kood töötab teisel minimaalsete muudatustega. - Parim: Algajatele, õpetajatele ja kõigile, kes keskenduvad kiirele prototüüpimisele. Õppimiskõver on leebem ja Adafruiti pakutav ulatuslik teekide ökosüsteem muudab sensorite, ekraanide ja muude komponentide integreerimise uskumatult lihtsaks.
MicroPython vs. CircuitPython: Lühike võrdlus
Nende vahel valimine taandub sageli teie projekti eesmärkidele ja kogemuste tasemele.
- Filosoofia: MicroPython seab esikohale riistvaraspetsiifilised funktsioonid ja jõudluse. CircuitPython seab esikohale lihtsuse, järjepidevuse ja õppimislihtsuse.
- Töövoog: MicroPythoniga kasutate tavaliselt tööriista nagu Thonny, et ühenduda seadme REPL-iga ja faile üles laadida. CircuitPythoniga lohistate
code.pyfaili USB-draivile. - Riistvara tugi: MicroPython toetab laia valikut plaate paljudelt tootjatelt. CircuitPython toetab peamiselt Adafruiti ja valitud kolmandate osapoolte partnerite plaate, kuid selle tugi on sügav ja hästi dokumenteeritud.
- Teegid: CircuitPythonil on massiivne, kureeritud teekide komplekt, mida on lihtne installida. MicroPythoni teegid on samuti saadaval, kuid võivad olla killustatumad.
Käesolevas juhendis kehtivad kontseptsioonid ja paljud koodinäited mõlema puhul, väikeste muudatustega. Osutame erinevustele, kus need on olulised.
Riistvara valimine: Mikrokontrollerite lahinguväli
Mikrokontrollerite (MCU-de) arv, mis suudavad Pythonit käitada, on viimastel aastatel plahvatuslikult kasvanud. Siin on mõned kõige populaarsemad ja kättesaadavamad valikud ülemaailmsele publikule.
Raspberry Pi Pico & RP2040
Mitte segi ajada täisväärtusliku Raspberry Pi arvutiga, Pico on odav, suure jõudlusega mikrokontrollerplaat, mis on ehitatud kohandatud RP2040 kiibi ümber. Sellest on saanud ülemaailmne lemmik Pythoni riistvaral kasutamiseks.
- Põhifunktsioonid: Võimas kahetuumaline ARM Cortex-M0+ protsessor, helde 264KB RAM ja ainulaadne funktsioon nimega Programmeeritav I/O (PIO), mis võimaldab luua kohandatud riistvaraliideseid. Uuem Pico W mudel lisab sisseehitatud Wi-Fi.
- Miks see on Pythoni jaoks suurepärane: Sellel on ametlik, esmaklassiline tugi MicroPythonile ja seda toetab hästi ka CircuitPython. Selle madal hind (sageli alla 10 USD) ja tugev jõudlus muudavad selle uskumatult väärtuslikuks.
Espressif ESP32 & ESP8266
Shanghai-põhise ettevõtte Espressif Systems toodetud ESP kiipide perekond on IoT vaieldamatud meistrid. Nad on tuntud oma integreeritud Wi-Fi ja Bluetoothi võimaluste poolest, mis teevad neist vaikimisi valiku ühendatud projektide jaoks.
- Põhifunktsioonid: Võimsad ühe- või kahetuumalised protsessorid, sisseehitatud Wi-Fi ja (ESP32-l) Bluetooth. Neid on saadaval tuhandetel erinevatel arendusplaatidel tootjatelt üle kogu maailma.
- Miks need on Pythoni jaoks suurepärased: Suurepärane MicroPythoni tugi võimaldab teil luua ühendatud seadmeid vaid mõne Pythoni koodireaga. Nende töötlemisvõimsus on enam kui piisav keerukate ülesannete jaoks, nagu veebiserverite käitamine või andmete haldamine mitmest sensorist.
Adafruit Feather, ItsyBitsy ja Trinket ökosüsteemid
Adafruit pakub laia valikut standardiseeritud vormiteguritega plaate. Need ei ole spetsiifilised kiibid, vaid pigem tootesarjad, mis on loodud sujuvaks tööks CircuitPythoni ökosüsteemis.
- Põhifunktsioonid: Feather-perekonna plaadid jagavad ühist pinout'i, mis muudab need vahetatavateks. Paljud sisaldavad sisseehitatud akulaadimisahelaid ja pistikuid. Neid on saadaval erinevate mikrokontrolleritega, sealhulgas RP2040, ESP32 ja teistega.
- Miks need on Pythoni jaoks suurepärased: Need on loodud CircuitPythoni jaoks algusest peale. See tihe integreerimine tähendab sujuvat plug-and-play kogemust sadade teekide ja õpetuste juurdepääsuga.
Alustamine: Teie esimene "Tere, Maailm" riistvaral
Liikugem teooriast praktikasse. Manussüsteemide programmeerimise traditsiooniline "Tere, Maailm" on LED-i vilgutamine. See lihtne tegevus kinnitab, et kogu teie tööriistakett – alates koodiredaktorist kuni plaadil oleva püsivarani – töötab õigesti.
Eeldused
- Toetatud mikrokontrollerplaat (nt Raspberry Pi Pico, ESP32 või Adafruiti plaat).
- USB-kaabel, mis toetab andmeedastust (mitte ainult laadimist).
- Arvuti (Windows, macOS või Linux).
1. samm: Püsivara installimine
Teie plaadile on vaja installida MicroPythoni või CircuitPythoni interpretaator. Seda nimetatakse "püsivara vilgutamiseks".
- CircuitPythoni jaoks: Külastage circuitpython.org, leidke oma plaat ja laadige alla
.uf2fail. Pange oma plaat alglaadimise režiimi (see hõlmab tavaliselt "BOOT" või "RESET" nupu all hoidmist selle ühendamisel). See ilmub USB-draivina. Lohistage allalaaditud.uf2fail sellele. Draiv eemaldub ja ilmub uuesti, nüüd nimega CIRCUITPY. - MicroPythoni jaoks: Külastage micropython.org, leidke oma plaat ja laadige alla püsivarafail (sageli
.uf2või.binfail). Protsess on sarnane: pange plaat alglaadimise režiimi ja kopeerige fail üle.
2. samm: Seadistage oma redaktor
Kuigi saate kasutada mis tahes tekstiredaktorit, muudab spetsiaalne IDE arenduse palju lihtsamaks. Thonny IDE on algajatele väga soovitatav. See on tasuta, platvormiülene ja sisaldab sisseehitatud tuge MicroPythonile ja CircuitPythonile. See tuvastab teie plaadi automaatselt, pakub juurdepääsu seadme REPL-ile ja muudab failide üleslaadimise lihtsaks.
3. samm: Vilkuva LED-i kood
Nüüd koodi juurde. Looge MicroPythoni jaoks uus fail nimega main.py või redigeerige CircuitPythoni jaoks olemasolevat code.py faili.
Näide MicroPythoni jaoks Raspberry Pi Pico W-l:
import machine
import utime
# The onboard LED on a Pico W is accessed via a special name
led = machine.Pin(\"LED\", machine.Pin.OUT)
while True:
led.toggle()
print(\"LED toggled!\")
utime.sleep(0.5) # Wait for half a second
Näide CircuitPythoni jaoks enamikul Adafruiti plaatidel:
import board
import digitalio
import time
# The onboard LED is usually connected to a pin named 'LED'
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
print(\"LED toggled!\")
time.sleep(0.5)
Koodi selgitus:
import: Impordime teegid riistvara juhtimiseks (machine,digitalio,board) ja aja haldamiseks (utime,time).- Pinni seadistus: Määratleme, millist füüsilist pinni me tahame juhtida (sisseehitatud LED) ja konfigureerime selle väljundiks.
- Silmus:
while True:silmus töötab igavesti. Silmuse sees lülitame LED-i olekut (sisse-välja või välja-sisse), prindime sõnumi jadakonsooli (nähtav Thonnys) ja seejärel peatume pooleks sekundiks.
Salvestage see fail oma seadmesse. Sisseehitatud LED peaks koheselt vilkuma hakkama. Palju õnne, olete just käivitanud Pythoni otse mikrokontrolleril!
Sügavamale sukeldumine: Pythoni põhikontseptsioonid mikrokontrolleritel
LED-i vilgutamine on alles algus. Uurime põhikontseptsioone, mida kasutate keerukamate projektide loomiseks.
Üldotstarbeline sisend/väljund (GPIO)
GPIO-pinnid on füüsilised ühendused, mis võimaldavad teie mikrokontrolleril maailmaga suhelda. Neid saab konfigureerida kas sisenditeks (andmete lugemiseks nuppudest või sensoritest) või väljunditeks (LED-ide, mootorite või releede juhtimiseks).
Nupuvajutuse lugemine (MicroPython):
import machine
import utime
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
if button.value() == 1:
print(\"Button is pressed!\")
utime.sleep(0.1)
Siin konfigureerime pinni 14 sisendiks koos sisemise pull-down takistiga. Silmus kontrollib pidevalt, kas nupu väärtus on 1 (kõrge), mis näitab, et seda on vajutatud.
Sensoritega töötamine
Enamik huvitavaid projekte hõlmab sensoreid. Python teeb nii analoog- kui ka digitaalsensoritest lugemise lihtsaks.
- Analoogsensorid: Need sensorid, nagu fotoresistorid (mõõtes valgust) või potentsiomeetrid, pakuvad muutuvat pinget. Mikrokontrolleri analoog-digitaalmuundur (ADC) loeb selle pinge ja teisendab selle numbriks.
- Digitaalsensorid: Need täpsemad sensorid (nagu temperatuuri/niiskuse sensorid, kiirendusandurid) suhtlevad spetsiifiliste protokollide abil. Kaks kõige tavalisemat on I2C (Inter-Integrated Circuit) ja SPI (Serial Peripheral Interface). Need protokollid võimaldavad mitmel seadmel suhelda mikrokontrolleriga vaid mõne pinni abil. Õnneks ei pea te harva teadma madalatasemelisi detaile, kuna teegid haldavad suhtlust teie eest.
Temperatuuri lugemine BMP280 sensoriga (CircuitPython):
import board
import adafruit_bmp280
# Create an I2C bus object
i2c = board.I2C() # Uses the default SCL and SDA pins
# Create a sensor object
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# Read the temperature
temperature = bmp280.temperature
print(f\"Temperature: {temperature:.2f} C\")
Impulsi laiuse modulatsioon (PWM)
PWM on tehnika, mida kasutatakse analoogväljundi simuleerimiseks digitaalsel pinil. Pinni kiirel sisse- ja väljalülitamisel saate juhtida keskmist pinget, mis on kasulik LED-i hämardamiseks, alalisvoolumootori kiiruse reguleerimiseks või servomootori positsioneerimiseks.
Ühenduvus ja asjade internet (IoT)
Siin paistavad ESP32 ja Pico W sarnased plaadid tõeliselt silma. Sisseehitatud Wi-Fi abil muudab Python IoT-seadmete loomise hämmastavalt lihtsaks.
Wi-Fi-ga ühendumine
Seadme võrku ühendamine on esimene samm. Peate looma faili (CircuitPythonis sageli nimega secrets.py) oma võrgu mandaatide turvaliseks salvestamiseks.
ESP32 ühendamine Wi-Fi-ga (MicroPython):
import network
SSID = \"YourNetworkName\"
PASSWORD = \"YourNetworkPassword\"
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(SSID, PASSWORD)
while not station.isconnected():
pass
print(\"Connection successful\")
print(station.ifconfig())
Veebipäringute tegemine
Pärast ühendumist saate Internetiga suhelda. Saate hankida andmeid rakendusliidestelt (API-delt), postitada sensoriandmeid veebiteenusesse või käivitada võrgutoiminguid.
JSON-andmete hankimine API-st (kasutades `urequests` teeki):
import urequests
response = urequests.get(\"http://worldtimeapi.org/api/timezone/Etc/UTC\")
data = response.json()
print(f\"The current UTC time is: {data['datetime']}\")
response.close()
MQTT: IoT keel
Kuigi HTTP on kasulik, on IoT-suhtluse kuldstandard MQTT (Message Queuing Telemetry Transport). See on kergekaaluline avaldamis-tellimise protokoll, mis on loodud madala ribalaiusega, suure latentsusajaga võrkude jaoks. Seade saab \"avaldada\" sensoriandmeid \"teema\"-sse ja iga teine seade (või server), mis on sellele teemale \"tellitud\", saab andmed koheselt. See on palju tõhusam kui veebiserveri pidev päringute tegemine.
Lisateemad ja parimad tavad
Projektide kasvades puutute kokku mikrokontrolleri piirangutega. Siin on mõned parimad tavad vastupidava manussüsteemide Pythoni koodi kirjutamiseks.
- Mäluhaldus: RAM on teie kõige väärtuslikum ressurss. Vältige suurte objektide, nagu loendite või pikkade stringide loomist silmuste sees. Kasutage
gcmoodulit (import gc; gc.collect()), et käsitsi käivitada prügikoristus ja vabastada mälu. - Energiahaldus: Akutoitega seadmete puhul on energiatõhusus kriitilise tähtsusega. Enamikul mikrokontrolleritel on \"sügava une\" režiim, mis lülitab suurema osa kiibist välja, tarbides väga vähe energiat, ja suudab ärgata pärast määratud aega või välise päästiku abil.
- Failisüsteem: Saate lugeda ja kirjutada faile sisseehitatud välkmällu, täpselt nagu tavalises arvutis. See sobib suurepäraselt andmete logimiseks või konfiguratsiooniseadete salvestamiseks.
- Katkestused: Nupu oleku pideva silmuses kontrollimise (protsess, mida nimetatakse küsitluseks) asemel saate kasutada katkestust. Katkestuspäring (IRQ) on riistvarasignaal, mis peatab peamise koodi spetsiaalse funktsiooni käivitamiseks ja seejärel jätkab. See on palju tõhusam ja reageerimisvõimelisem.
Reaalmaailma projektide ideede tutvustus
Valmis ehitama? Siin on mõned ideed, mis ühendavad arutatud kontseptsioone:
- Nutikas ilmajaam: Kasutage ESP32-te koos BME280 sensoriga temperatuuri, niiskuse ja rõhu mõõtmiseks. Kuvage andmed väikesel OLED-ekraanil ja avaldage need MQTT kaudu armatuurlauale nagu Adafruit IO või Home Assistant.
- Automatiseeritud taimede kastmissüsteem: Ühendage mullaniiskuse sensor Raspberry Pi Pico külge. Kui muld on kuiv, kasutage GPIO pinni relee aktiveerimiseks, mis lülitab mõneks sekundiks sisse väikese veepumba.
- Kohandatud USB-makropadi: Kasutage CircuitPythoni plaati, mis toetab USB HID-d (Human Interface Device), näiteks Picot või paljusid Adafruiti plaate. Programmeerige nupud saatma keerulisi klaviatuuri otseteid või trükkima etteantud teksti, suurendades oma tootlikkust.
Järeldus: Tulevik on manustatud Pythonisse
Python on fundamentaalselt muutnud manussüsteemide arenduse maastikku. See on langetanud sisenemisbarjääri, võimaldades tarkvaraarendajatel riistvara juhtida ja riistvarainseneridel prototüüpe luua kiiremini kui kunagi varem. Sensori lugemise või Internetiga ühendumise lihtsus vaid mõne loetava koodireaga on murranguline.
Teekond vilkuvast LED-ist täisfunktsionaalse IoT-seadmeni on uskumatult tasuv. Ülemaailmne kogukond ja hulgaliselt avatud lähtekoodiga teeke tähendab, et te ei ole kunagi väljakutsega kokku puutudes üksi. Nii et valige plaat, vilgutage püsivara ja alustage oma seiklust Pythoni ja füüsilise maailma põnevas ristumiskohas. Ainus piir on teie kujutlusvõime.